package cn.wenhe9.novel.service;

import cn.wenhe9.novel.domain.dto.*;
import cn.wenhe9.novel.domain.vo.*;
import cn.wenhe9.novel.result.PageResultDto;
import cn.wenhe9.novel.result.ResultResponse;

import javax.servlet.http.HttpServletRequest;

/**
 * 会员模块 服务类
 *
 * @author DuJinliang
 * 2022/5/18
 */
public interface UserService {

    /**
     * 用户注册
     * */
    ResultResponse<UserRegisterDto> register(UserRegisterVo vo);

    /**
     * 用户登录
     * */
    ResultResponse<UserLoginDto> login(UserLoginVo vo);

    /**
     * 用户反馈
     * */
    ResultResponse<Void> saveFeedback(Long userId, String content);

    /**
     * 用户信息修改
     * */
    ResultResponse<Void> updateUserInfo(Long userId, UserInfoUpdateVo vo);

    /**
     * 用户反馈删除
     * */
    ResultResponse<Void> deleteFeedback(Long userId, Long id);

    /**
     * 发表评论
     * @param dto 评论相关 DTO
     * @return void
     * */
    ResultResponse<Void> saveComment(UserCommentVo dto);

    /**
     * 查询书架状态接口
     * @return 0-不在书架 1-已在书架
     */
    ResultResponse<Integer> getBookshelfStatus(Long userId, String bookId);

    /**
     * 查询个人信息
     */
    ResultResponse<UserInfoDto> getUserInfo(Long userId);

    /**
     * 更新密码
     */
    void updatePassword(Long userId, UserPasswordUpdateVo vo);


    /**
     * 查询用户反馈列表
     */
    PageResultDto<UserFeedbackDto> listFeedBack(Long userId, Long page, Long limit);

    /**
     * 分页查询书架
     */
    PageResultDto<UserBookShelfDto> listUserBookShelfByPage(Long userId, Long page, Long limit);

    /**
     * 加入书架
     */
    void addToBookShelf(Long userId, Long bookId, Long preContentId);

    /**
     * 移出书架
     */
    void removeFromBookShelf(Long userId, Long bookId);

    /**
     * 添加阅读记录
     */
    void addReadHistory(Long userId, Long bookId, Long preContentId);

    /**
     * 分页查询阅读记录
     */
    PageResultDto<UserReadHistoryDto> listReadHistoryByPage(Long userId, Long page, Long limit);

    /**
     * 分页用户的所有评论
     */
    PageResultDto<UserCommentDto> listCommentByPage(Long userId, Long page, Long limit);
}
